package main

/*
移动数组
给定一个数组，将数组中的元素向右移动k个位置，其中k是非负数。

进阶：
尽可能想出更多的解决方案，至少有三种不同的方法可以解决这个问题。
你可以使用一个数组解决这个问题吗？
*/

//借助额外数组
/*
func rotate(nums []int, k int)  {
	if len(nums)<k{
		k = k%len(nums)
	}
	if len(nums)!=1{
		num1 := make([]int, len(nums))
		copy(num1,nums)//num1作为不变的切片，仅提供数组
		for i:=0;i<len(nums);i++{
			if i <= len(nums) - k -1{ //当i小于等于3时 直接赋值
				nums[k+i]=num1[i]//修改nums
			}else{
				//i=4 nums[0]=num1[4]
				//i=5 nums[1]=num1[5]
				//nums[k-(len(nums)-(i+1))-1]=num1[i]
				nums[k-len(nums)+i]=num1[i]
			}
		}
	}
	fmt.Println(nums)
}
*/

//切片
func rotate(nums []int, k int) {
	if len(nums) == 1 {
		return
	}
	k = k % len(nums)
	newNums := append(nums[len(nums)-k:], nums[:len(nums)-k]...)
	copy(nums, newNums)
}

func main() {
	num := []int{1, 2, 3}
	k := 3
	rotate(num, k)
}
